package com.partner.action.sysright;

import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.partner.bean.sysright.Sysbuttons;
import com.partner.bean.sysright.TSysicon;
import com.partner.bean.sysright.TSysright;
import com.partner.bean.sysright.TSysrightVo;
import com.partner.frame.Result;
import com.partner.frame.common.ConstantsMark;
import com.partner.service.sysright.SysButtonsService;
import com.partner.service.sysright.SysIconService;
import com.partner.service.sysright.SysRightManagerService;

/** 
 * @ClassName: SysRightManagerAction 
 * @Description: 管理员管理 --> 权限管理控制器
 * @author Lizuoyang 
 * @date 2017年5月3日 下午5:44:07  
 */ 
@Controller
@RequestMapping("/sysright")
public class SysRightManagerAction {
	
	@Autowired
	SysRightManagerService sysRightManagerService;
	
	
	@Autowired
	SysIconService sysIconService;
	
	@Autowired
	SysButtonsService sysButtonsService;
	
	
	/**
	 * @Title      : sysrightlist 
	 * @Description: 查询所有权限  成功后跳转至权限管理页面
	 * @return     : ModelAndView
	 * @author     : Lizuoyang
	 * Create Date : 2017年5月3日 下午5:45:35
	 * @throws 
	 */
	@RequestMapping(value="/sysrightlist")
	public ModelAndView sysrightlist(TSysrightVo right){
		ModelAndView mv = new ModelAndView();
		List<TSysrightVo> allRight = sysRightManagerService.getAllRight(right);
		mv.addObject("data", allRight);
		mv.addObject("rname", right.getRightname());
		mv.setViewName("/pages/sysright/sysrightlist");
		return mv;
	}
	
	/**
	 * @Title      : sysrightbeforeupd 
	 * @Description: 修改权限之前 查询出所有父节点列表 及权限基本数据
	 * @param id	权限ID
	 * @return     : ModelAndView
	 * @author     : Lizuoyang
	 * Create Date : 2017年5月4日 上午9:31:46
	 * @throws 
	 */
	@RequestMapping(value="sysrightbeforeupd",method=RequestMethod.GET)
	public ModelAndView sysrightbeforeupd(int id){
		ModelAndView mv = new ModelAndView();
		
		//查询所有父节点
		List<TSysrightVo> allParentRights = sysRightManagerService.getAllParentRights(0,0,null);
		
		//根据权限id查询
		TSysright right = sysRightManagerService.selectByPrimaryKey(id);
		//获取系统所有按钮功能
		List<Sysbuttons> allButtons = sysButtonsService.getAllButtons();
		//获取系统所有图标
		List<TSysicon> allIcon = sysIconService.getAllIcon();
		
		mv.addObject("allParentRights", allParentRights);
		mv.addObject("right", right);
		mv.addObject("allButtons", allButtons);
		mv.addObject("allIcon", allIcon);
		mv.setViewName("/pages/sysright/sysrightupd");
		return mv;
	}
	
	/**
	 * @Title      : sysrightafterupd 
	 * @Description: 修改权限 
	 * @return     : Result
	 * @author     : Lizuoyang
	 * Create Date : 2017年5月4日 下午2:18:57
	 * @throws 
	 */
	@RequestMapping(value="/sysrightafterupd",method=RequestMethod.POST)
	@ResponseBody
	public Result sysrightafterupd(TSysrightVo right){
		Result r = new Result();
		
		//如果修改的为子节点 则查询出当前选择父节点下最大的排序值 并保存
		if(right.getParentid() != 0){
			Double  maxOrderNum = sysRightManagerService.getMaxOrderNum(right.getParentid());
			//如果返回结果为空  则表示此父节点下无子节点
			if(maxOrderNum == null){
				TSysright parent = sysRightManagerService.selectByPrimaryKey(right.getParentid());
				maxOrderNum = parent.getOrdernum()+0.1;
			}
			right.setOrdernum(maxOrderNum);
		}
		//如果修改的为父节点 则刷新此父节点下所有子节点的排列顺序
		else{
			List<TSysrightVo> items = sysRightManagerService.getAllParentRights(right.getId(),0,null);
			double ordernum = right.getOrdernum()+0.1;
			for (TSysrightVo item : items) {
				item.setOrdernum(ordernum);
				sysRightManagerService.updateSysRight(item);
				ordernum+=0.1;
			}
		}
		sysRightManagerService.updateSysRight(right);
		r.setDesc(ConstantsMark.INFO_UPDATESUCCESS);
		return r;
	}
	
	/**
	 * @Title      : sysrightvalidupd 
	 * @Description: 判断当前修改的排列顺序是否存在
	 * @param right
	 * @return     : Result
	 * @author     : Lizuoyang
	 * Create Date : 2017年5月5日 上午10:58:06
	 * @throws 
	 */
	@RequestMapping(value="/sysrightvalidupd",method=RequestMethod.POST)
	@ResponseBody
	public Result sysrightvalidupd(TSysrightVo right){
		Result r = new Result();
		r.setObject(sysRightManagerService.selectByOrdernum(right.getOrdernum()));
		return r;
	}
	
	/**
	 * @Title      : deleteSysRight 
	 * @Description: 删除权限
	 * @param id
	 * @return     : Result
	 * @author     : Lizuoyang
	 * Create Date : 2017年5月4日 下午2:39:39
	 * @throws 
	 */
	@RequestMapping(value="/deleteSysRight",method=RequestMethod.POST)
	@ResponseBody
	public Result deleteSysRight(TSysrightVo right){
		Result r = new Result();
		
		//如果选中的权限是父节点 那么删除父节并删除属于此父节点的所有子节点
		if(right.getParentid() == 0){
			List<TSysrightVo> rights = sysRightManagerService.getAllParentRights(right.getId(),0,null);
			if(rights.size() >0){
				r.setDesc(ConstantsMark.INFO_NOT_DELETE);
			}else{
				sysRightManagerService.deleteSysRight(right.getId());
				r.setDesc(ConstantsMark.INFO_DELETESUCCESS);
			}
			
		}else{
			sysRightManagerService.deleteSysRight(right.getId());
			r.setDesc(ConstantsMark.INFO_DELETESUCCESS);
		}
		
		return r;
	}
	
	/**
	 * @Title      : delterightByBatch 
	 * @Description: 权限管理  批量删除
	 * @param id
	 * @return     : Result
	 * @author     : Lizuoyang
	 * Create Date : 2017年5月4日 下午3:06:50
	 * @throws 
	 */
	@RequestMapping(value="/delterightByBatch",method=RequestMethod.POST)
	@ResponseBody
	public Result delterightByBatch(String id){
		Result r = new Result();
		
		String[] arr = id.split(",");
		for (String i : arr) {
			
			TSysright right = sysRightManagerService.getSysRightByPrimaryKey(Integer.valueOf(i));
			
			if(right.getParentid() == 0){
				//查找父节点下所有子节点
				List<TSysrightVo> rights = sysRightManagerService.getAllParentRights(right.getParentid(),0,null);
				
				//如果还有子节点 则不允许删除
				if(rights.size() >0){
					r.setDesc(ConstantsMark.INFO_NOT_DELETE);
				}else{
					//没有子节点则直接删除此父节点
					sysRightManagerService.deleteSysRight(right.getId());
					r.setDesc(ConstantsMark.INFO_DELETESUCCESS);
				}
			}else{
				//不是父节点则直接删除
				sysRightManagerService.deleteSysRight(right.getId());
				r.setDesc(ConstantsMark.INFO_DELETESUCCESS);
			}
		}
		return r;
	}
	
	/**
	 * @Title      : sysrightbeforeadd 
	 * @Description: 新增权限之前 查询出所有父节点列表 及所有系统图标
	 * @return     : ModelAndView
	 * @author     : Lizuoyang
	 * Create Date : 2017年5月4日 下午4:51:56
	 * @throws 
	 */
	@RequestMapping(value="/sysrightbeforeadd",method=RequestMethod.GET)
	public ModelAndView sysrightbeforeadd(){
		ModelAndView mv = new ModelAndView();
		//查询所有父节点
		List<TSysrightVo> allParentRights = sysRightManagerService.getAllParentRights(0,0,null);
				
		//获取系统所有图标
		List<TSysicon> allIcon = sysIconService.getAllIcon();
		
		//获取系统所有按钮功能
		List<Sysbuttons> allButtons = sysButtonsService.getAllButtons();
		
		//当前菜单排序最大值
		Integer maxOrderNum = sysRightManagerService.getMaxParentOrderNum();
		if(maxOrderNum == null){
			maxOrderNum = 1;
		}
		
		mv.addObject("allParentRights", allParentRights);
		mv.addObject("allIcon", allIcon);
		mv.addObject("allButtons", allButtons);
		mv.addObject("ordernum", maxOrderNum);
		mv.setViewName("/pages/sysright/sysrightadd");
		return mv;
	}
	
	/**
	 * @Title      : sysrightafteradd 
	 * @Description: 权限新增
	 * @param right
	 * @return     : Result
	 * @author     : Lizuoyang
	 * Create Date : 2017年5月5日 上午8:38:06
	 * @throws 
	 */
	@RequestMapping(value="/sysrightafteradd",method=RequestMethod.POST)
	@ResponseBody
	public Result sysrightafteradd(TSysrightVo right){
		Result r = new Result();
		//如果修改的为子节点 则查询出当前选择父节点下最大的排序值 并保存
		if(right.getParentid() != 0){
			Double  maxOrderNum = sysRightManagerService.getMaxOrderNum(right.getParentid());
			//如果返回结果为空  则表示此父节点下无子节点
			if(maxOrderNum == null){
				TSysright parent = sysRightManagerService.selectByPrimaryKey(right.getParentid());
				maxOrderNum = parent.getOrdernum()+0.1;
			}
			right.setOrdernum(maxOrderNum);
		}
		sysRightManagerService.insert(right);
		r.setDesc(ConstantsMark.INFO_SAVESUCCESS);
		return r;
	}
	
	/**
	 * @Title      : getMaxOrderNum 
	 * @Description: 获得当前菜单的最后值
	 * @return     : Result
	 * @author     : Lizuoyang
	 * Create Date : 2017年5月5日 上午9:35:17
	 * @throws 
	 */
	@RequestMapping(value="/getMaxOrderNum",method=RequestMethod.POST)
	@ResponseBody
	public Result getMaxOrderNum(){
		Result r = new Result();
		int maxOrderNum = sysRightManagerService.getMaxParentOrderNum();
		r.setObject(maxOrderNum);
		return r;
	}

}
